//专门处理管理员的业务逻辑
// 1. express 框架
const express = require('express');
const fs = require('fs');
const path = require('path');
// 2.创建一个后台路由
const router = express.Router();
// 导入管理员数据模块
const adminModel = require('../../model/adminModel');
// 导入jwt token工具
const JwtUtil = require('../../utils/jwt');
// 导入生成id的包
const { v4: uuidv4 } = require('uuid');
// 接口1: 注册功能（不需要邮箱验证码）
router.post('/register', async (req, res) => {
    // 解构赋值
    let { admin_acc, admin_pwd, admin_name, admin_create_time } = req.body;
    // 判断账号是否为邮箱
    // if (rep_email.test(admin_acc)) {
    if (admin_acc) {
        // 生成随机字符串
        let admin_id = uuidv4();
        // 注册管理员
        await adminModel.register(admin_id, admin_acc, admin_pwd, admin_name, admin_create_time)
            .then(
                content => {
                    res.send(content);
                }
            )
            .catch(
                error => {
                    res.send(error);
                }
            )
    } else {
        // 数据格式不正确
        res.send({
            code: -1,
            msg: '该账号不是一个邮箱格式。'
        })
    }
})

// 接口5：登录功能（不需要邮箱验证码）
// 参数：admin_acc , admin_pwd
router.post('/login', async (req, res) => {
    let { admin_acc, admin_pwd } = req.body;
    if (admin_acc == undefined || admin_pwd == undefined) {
        res.send({
            code: -1,
            msg: '缺少参数，检查提交的方式是否正确?'
        })
        return;
    }

    if (admin_acc == false || admin_pwd == false) {
        res.send({
            code: -1,
            msg: '缺少参数，检查提交的方式是否正确?'
        })
        return;
    }
    // 如果管理员把手机号码和账号进行绑定了，管理员就可以使用手机号码进行登录（本身使用邮箱登录）
    // if (rep_phone.test(admin_acc) || rep_email.test(admin_acc)) {
    // 管理员名有值，直接去登录
    if (admin_acc) {
        // 调用登录方法
        await adminModel.login(admin_acc, admin_pwd)
            .then(
                data => {
                    res.send(data)
                }
            )
            .catch(
                err => {
                    res.send({ code: 500, msg: '服务器异常...', err })
                }
            )
    }
    else {
        res.send({
            code: -1,
            msg: '账号格式不正确?'
        })
    }

})

// 接口：删除管理员
router.get('/remove', async (req, res) => {
    // 从请求头对象获取token信息
    let token = req.headers['token'] || req.query.token;
    // 判断管理员登录状态
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含管理员身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒管理员重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        // 删除管理员的API
        let admin_id = result.data;
        await adminModel.remove(admin_id).then(content => {
            res.send(content)
        })
            .catch(err => {
                res.send(err)
            })
    }

})

// 接口：修改管理员信息
router.post('/modify', async (req, res) => {
    let token = req.headers.token;
    // 判断管理员登录状态
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含管理员身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒管理员重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let { admin_pwd, admin_name } = req.body;
        let admin_id = result.data;
        await adminModel.modify(admin_id, admin_name, admin_pwd).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})

// 接口：获取管理员信息
router.post('/admin_info', async (req, res) => {
    let token = req.headers.token;
    // console.log('xxx',token)
    // 判断管理员登录状态
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含管理员身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒管理员重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let admin_id = result.data;
        // console.log({admin_id});
        await adminModel.get_userInfo(admin_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})

// 删除用户（管理员删除用户）
router.post('/delete', async (req, res) => {
    let token = req.headers.token;
    let {user_id} = req.body;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        await adminModel.delete(user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 用户列表
router.get('/list', async (req, res) => {
    let { page_num, page_size } = req.query;
    await adminModel.list(page_num, page_size).then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

// 用户详情
router.get('/detail', async (req, res) => {
    let { user_id } = req.query;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        await adminModel.detail(user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 搜索用户
router.get('/search', async (req, res) => {
    let { keyword } = req.query;
    await adminModel.search(keyword).then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

// 统计用户总数
router.get('/total', async (req, res) => {
    await adminModel.total().then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

// 导出当前路由
module.exports = router;